#include <iostream>
using namespace std;

struct ListNode {
  int val;
  ListNode *next;
  ListNode() : val(0), next(nullptr) {}
  ListNode(int x) : val(x), next(nullptr) {}
  ListNode(int x, ListNode *next) : val(x), next(next) {}
};

class Solution {
public:
  ListNode *reverseList(ListNode *head) {
    // pre 用来上一个节点的信息，crr 用来保存当前节点的信息
    ListNode *prev = nullptr, *crr = head, *next = nullptr;
    while (crr) {
      // 先保存下一个节点信息
      next = crr->next;
      // 当前节点指向上一个节点
      crr->next = prev;
      // 当前节点便成为 next 的上一个节点
      prev = crr;
      crr = next;
    }
    return prev;
  }
};

int main() {}